package com.bbva.general.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import com.bbva.general.dao.UsuariosDAOImpl;
import com.bbva.general.entities.Datosgenerales;
import com.bbva.general.entities.Usuarios;
import com.bbva.general.entities.VtFaUsuarios;
import com.bbva.general.entities.Perfilusuario;
import com.bbva.general.generics.Constantes;
import com.bbva.general.controller.VtFaUsuariosController;
import com.bbva.general.controller.PerfilusuarioController;
import com.bbva.general.generics.ControllerSystem;
import com.bbva.general.generics.ServiceGeneric;
import com.bbva.general.controller.DatosgeneralesController;

public class UsuariosController extends UsuariosDAOImpl {

	private List<VtFaUsuarios> listaUsuarios = new ArrayList<VtFaUsuarios>();
	private List<SelectItem> listaTipoUsuario = new ArrayList<SelectItem>();
	private List<SelectItem> listaPerfiles = new ArrayList<SelectItem>();
	private Usuarios bean;
	private int indice;
	private int esNuevo = 1;
	private String tituloMant = "";
	private String buscarPor = "";
	private String valABuscar = "";
	private String idPerfilX = "";
	private String nombreUsuario="";
		
	
	
	public String getNombreUsuario() {
		return nombreUsuario;
	}

	public void setNombreUsuario(String nombreUsuario) {
		this.nombreUsuario = nombreUsuario;
	}

	public String getIdPerfilX() {
		return idPerfilX;
	}

	public void setIdPerfilX(String idPerfilX) {
		this.idPerfilX = idPerfilX;
	}

	public List<SelectItem> getListaPerfiles() {
		return listaPerfiles;
	}

	public void setListaPerfiles(List<SelectItem> listaPerfiles) {
		this.listaPerfiles = listaPerfiles;
	}

	public List<SelectItem> getListaTipoUsuario() {
		return listaTipoUsuario;
	}

	public void setListaTipoUsuario(List<SelectItem> listaTipoUsuario) {
		this.listaTipoUsuario = listaTipoUsuario;
	}

	public List<VtFaUsuarios> getListaUsuarios() {
		return listaUsuarios;
	}
	
	public void setListaUsuarios(List<VtFaUsuarios> listaUsuarios) {
		this.listaUsuarios = listaUsuarios;
	}
	
	public Usuarios getBean() {
		return bean;
	}
	
	public void setBean(Usuarios bean) {
		this.bean = bean;
	}
	
	public int getIndice() {
		return indice;
	}
	
	public void setIndice(int indice) {
		this.indice = indice;
	}
	
	public int getEsNuevo() {
		return esNuevo;
	}
	
	public void setEsNuevo(int esNuevo) {
		this.esNuevo = esNuevo;
	}
	
	public String getTituloMant() {
		return tituloMant;
	}
	
	public void setTituloMant(String tituloMant) {
		this.tituloMant = tituloMant;
	}
	
	public String getBuscarPor() {
		return buscarPor;
	}
	
	public void setBuscarPor(String buscarPor) {
		this.buscarPor = buscarPor;
	}
	
	public String getValABuscar() {
		return valABuscar;
	}
	
	public void setValABuscar(String valABuscar) {
		this.valABuscar = valABuscar;
	}
	
	public List<SelectItem> obtenerListaTipoUsuario() {
		List<Datosgenerales> lisTipoUsuario = (new DatosgeneralesController()).getDatosTabla(Constantes.TAB_TIPOS_USUARIOS);
		List<SelectItem> temp = new ArrayList<SelectItem>();
		
		temp.add(new SelectItem(Constantes.VAL_DEFAULT_ID_COMBO, Constantes.VAL_DEFAULT_DESC_COMBO));
		for(Datosgenerales dato:lisTipoUsuario){
			temp.add(new SelectItem(dato.getIddato(),dato.getDescripcion()));
		}
		return temp;
	}
	
	public List<SelectItem> obtenerListaPerfiles() {
		List<Perfilusuario> lisPerfiles = (new PerfilusuarioController()).getList();
		List<SelectItem> temp = new ArrayList<SelectItem>();
		
		temp.add(new SelectItem(Constantes.VAL_DEFAULT_ID_COMBO, Constantes.VAL_DEFAULT_DESC_COMBO));
		for(Perfilusuario dato:lisPerfiles){
			temp.add(new SelectItem(dato.getIdperfil(),dato.getDescripcion()));
		}
		return temp;
	}
	
	public void nuevoRegistro(ActionEvent evt)
	{
		actualizarListas();
		
		setBean(new Usuarios());
		setEsNuevo(1);
		setTituloMant("Nuevo Usuario");
	}
	
	public void editarRegistro(ActionEvent evt)
	{
		actualizarListas();
		
		setBean(getUsuario(getListaUsuarios().get(getIndice()).getIdusuario()));
		setIdPerfilX(getBean().getPerfilusuario().getIdperfil());
		setEsNuevo(0);
		setTituloMant("Editar Usuario");
	}
	
	public String eliminarRegistro()
	{
		String forward = getForwardPadre();
		setBean(getUsuario(getListaUsuarios().get(getIndice()).getIdusuario()));
		
		Usuarios beanEliminar = getBean();
		System.out.println("Se elimina: " + beanEliminar.getIdregistro());
		delete(beanEliminar);
		
		mostrarRegistros(null);
		
		return forward;
	}
	
	public String guardarRegistro()
	{
		String pageRetornar = "mant_lusuarios";
		ServiceGeneric gService = new ServiceGeneric();
		ControllerSystem controllerSystem = (ControllerSystem)gService.getSpringBean(Constantes.CONTROLLER_SYSTEM);
		
		try{
			if(validar())
			{				
				if(getEsNuevo() == 1)
				{
					Perfilusuario beanPerfil = new Perfilusuario();
					beanPerfil.setIdperfil(getIdPerfilX());
					
					Usuarios nuevoReg = getBean();
					nuevoReg.setIdusuario(Constantes.ID_BLANCO);
					nuevoReg.setPerfilusuario(beanPerfil);
					nuevoReg.setFhcrea(new Date());
					nuevoReg.setUsucrea(controllerSystem.getUsuarioActual());
					nuevoReg.setPccrea(controllerSystem.getPcUsuario());
					System.out.println("Creando: " + nuevoReg.getIdregistro());
					save(nuevoReg);
				}
				else
				{
					Perfilusuario beanPerfil = new Perfilusuario();
					beanPerfil.setIdperfil(getIdPerfilX());
					
					Usuarios regModificado = getBean();
					regModificado.setPerfilusuario(beanPerfil);
					regModificado.setFhmodi(new Date());
					regModificado.setUsumodi(controllerSystem.getUsuarioActual());
					regModificado.setPcmodi(controllerSystem.getPcUsuario());
					System.out.println("Modificando: " + regModificado.getIdregistro());
					update(regModificado);
				}
				mostrarRegistros(null);
				pageRetornar = "mant_lusuarios";
				gService.setMessageSuccess(Constantes.MENSAJE_EXITO_GRABAR);
			}
			else
			{
				pageRetornar = "mant_usuarios";
			}
		}
		catch (Exception e){
			gService.setMessageError(e.getMessage());
			pageRetornar = "mant_usuarios";
		}
		return pageRetornar;
	}

	public boolean validar()
	{
		ServiceGeneric gService = new ServiceGeneric();
		
		if(getBean().getIdregistro().trim().length() == 0)
		{
			gService.setMessageError("Ingrese un registro valido para el usuario");
			return false;
		}
		
		if(getBean().getNombre().trim().length() == 0)
		{
			gService.setMessageError("Ingrese el nombre del usuario");
			return false;
		}
		
		if(getBean().getIdtipo().trim().length() == 0)
		{
			gService.setMessageError("Seleccione el tipo de usuario");
			return false;
		}
		
		if(getIdPerfilX().trim().length() == 0)
		{
			gService.setMessageError("Seleccione el perfil del usuario");
			return false;
		}
		
		return true;
	}
		
	public void mostrarRegistros(ActionEvent evt)
	{
		setListaUsuarios((new VtFaUsuariosController()).getList());
	}
	
	public void actualizarListas()
	{
		setListaPerfiles(obtenerListaPerfiles());
		setListaTipoUsuario(obtenerListaTipoUsuario());
	}	
	
	 public void cerrarSesion(ActionEvent evt){
		 	getRequest().getSession(false).setAttribute(Constantes.SESSION_USER, null);
		 	getRequest().getSession(false).setAttribute(Constantes.SESSION_OPCIONES, null);
		 	getRequest().getSession(false).invalidate();						
		} 

	
}
